package com.epkursant.message;

import java.util.Date;

import com.ep.general.ActionSupportCustom;
import com.ep.general.RodzajUzytkownika;
import com.ep.general.admin.Administrator;
import com.ep.general.admin.AdministratorMdt;
import com.ep.general.komunikat.KomunikatMdt;
import com.ep.general.komunikat.KomunikatOdbiorcaMdt;
import com.ep.general.komunikat.KomunikatView;
import com.ep.general.komunikat.StatusKomunikatu;
import com.ep.general.komunikat.db.Komunikat;
import com.ep.general.komunikat.db.KomunikatOdbiorca;
import com.ep.general.kursant.Kursant;
import com.epkursant.app.login.LoginRequred;

public class KomunikatAction extends ActionSupportCustom<Kursant> implements
		LoginRequred {

	private static final long serialVersionUID = 5412852101281709683L;

	private final String ERROR_MESSAGE = "error";
	private final String ADMIN = "admin";
	private final String INSTRUKTOR = "instruktor";
	private final String NEW_MESSAGE = "new_message";
	private final String IN_MESSAGE = "in_message";
	private final String OUT_MESSAGE = "out_message";
	// id number of default admin to send message
	private final int ID_DEFAULT_ADMIN = 1;
	private KomunikatView view;
	private KomunikatOdbiorcaForm odbiorcy;

	private String messageContent;
	private String messageRecivers;
	private String messageTopic;

	public String execute(){
		return SUCCESS;
	}
	
	public String newMessage(){
		return NEW_MESSAGE;
	}
	
	public String inMessage(){
		return IN_MESSAGE;
	}
	
	public String outMessage(){
		return OUT_MESSAGE;
	}
	
	public String listWyslane() {
		setDataArray(getView().getWyslaneKursant(getLoggedUser().getId()));
		return DATA_ARRAY;
	}

	public String listOdebrane() {
		setDataArray(getView().getOdebraneKursant(getLoggedUser().getId()));
		return DATA_ARRAY;
	}
	
	public String getNameOfMyInstructor(){
		if(getLoggedUser().getInstruktor() != null){
			String imie = getLoggedUser().getInstruktor().getImie();
			String nazwisko = getLoggedUser().getInstruktor().getNazwisko();
			
			setText("Instruktor: " + imie + " " + nazwisko);
		}else{
			setText("null");
		}
		
		return TEXT_RESULT;
	}
	
	public String getNameOfAdministrator(){
		AdministratorMdt adminMdt = new AdministratorMdt();
		Administrator admin = new Administrator();
		
		if(adminMdt.get(ID_DEFAULT_ADMIN) != null){
			admin = adminMdt.get(ID_DEFAULT_ADMIN);
		
			String imie = admin.getImie();
			String nazwisko = admin.getNazwisko();
		
			setText("Administrator: " + imie + " " + nazwisko);
		}else{
			setText("null");
		}
		return TEXT_RESULT;
	}

	public String send() {

		if (messageContent.equals("") || messageContent == null ) {
			addActionError("Wpisz treść wiadomości");
			return ERROR_MESSAGE;
		}
		if (messageTopic == null || messageTopic.equals("")) {
			addActionError("Wpisz temat wiadomości");
			return ERROR_MESSAGE;
		}

		if (messageRecivers.equals("") || messageRecivers == null) {
			addActionError("Brak odbiorcy komunikatu");
			return ERROR_MESSAGE;
		}
		
		odbiorcy = new KomunikatOdbiorcaForm();
		
		//message to instruktor
		if(messageRecivers.equals(INSTRUKTOR)){
			odbiorcy.setId(getLoggedUser().getInstruktor().getId());
			odbiorcy.setImie(getLoggedUser().getInstruktor().getImie());
			odbiorcy.setNazwisko(getLoggedUser().getInstruktor().getNazwisko());
			odbiorcy.setRodzaj(RodzajUzytkownika.INSTRUKTOR);
			
			
		}else if(messageRecivers.equals(ADMIN)){
			AdministratorMdt adminMdt = new AdministratorMdt();
			Administrator admin = new Administrator();
			admin = adminMdt.get(ID_DEFAULT_ADMIN);
			
			odbiorcy.setId(admin.getId());
			odbiorcy.setImie(admin.getImie());
			odbiorcy.setNazwisko(admin.getNazwisko());
			odbiorcy.setRodzaj(RodzajUzytkownika.ADMINISTRATOR);
		}
		
		Komunikat komunikat = saveKomunikat();
		saveOdbiorcyKomunikatu(odbiorcy, komunikat);

		setText("Wiadomość została wysłana");
		return SUCCESS;
	}
	
	private void saveOdbiorcyKomunikatu(KomunikatOdbiorcaForm odbiorcy, Komunikat komunikat) {
		KomunikatOdbiorcaMdt komunikatOdbiorcaMdt = new KomunikatOdbiorcaMdt();
		KomunikatOdbiorca entity = new KomunikatOdbiorca();
		
		entity.setKomunikat(komunikat);
		entity.setOdbiorcaId(odbiorcy.getId());
		entity.setRodzajOdbiorcy(odbiorcy.getRodzaj());
		entity.setStatusKomunikatu(StatusKomunikatu.ODEBRANY);
		komunikatOdbiorcaMdt.makePersistent(entity);
	}
	
	private Komunikat saveKomunikat() {
		Komunikat entity = new Komunikat();
		entity.setTemat(messageTopic);
		entity.setTresc(messageContent);
		entity.setAutorId(getLoggedUser().getId());
		entity.setStatus(StatusKomunikatu.WYSLANY);
		entity.setData(new Date());
		entity.setRodzajAutora(RodzajUzytkownika.KURSANT);
		return new KomunikatMdt().makePersistent(entity);
	}
	
	private KomunikatView getView() {
		if (view == null)
			view = new KomunikatView();
		return view;
	}

	public String getMessageContent() {
		return messageContent;
	}

	public void setMessageContent(String messageContent) {
		this.messageContent = messageContent;
	}

	public String getMessageRecivers() {
		return messageRecivers;
	}

	public void setMessageRecivers(String messageRecivers) {
		this.messageRecivers = messageRecivers;
	}

	public String getMessageTopic() {
		return messageTopic;
	}

	public void setMessageTopic(String messageTopic) {
		this.messageTopic = messageTopic;
	}
	
	public KomunikatOdbiorcaForm getOdbiorcy() {
		return odbiorcy;
	}

	public void setOdbiorcy(KomunikatOdbiorcaForm odbiorcy) {
		this.odbiorcy = odbiorcy;
	}
	
}
